//
//  RDeliveryDependProtocol.h
//  RDelivery
//
//  Created by selmerzhang on 2021/8/9.
//  Copyright © 2021 Tencent. All rights reserved.
//

#ifndef RDeliveryDependProtocol_h
#define RDeliveryDependProtocol_h

#import <RaftInterface/RAFTKVStorageFactoryProtocol.h>
#import <RaftInterface/RAFTLogProtocol.h>
#import <RaftInterface/RAFTBeaconProtocol.h>
#import <RaftInterface/RAFTNetworkProtocol.h>
#import "RDeliveryYYModelProtocol.h"

@protocol RDeliveryDependProtocol <NSObject>

/// kv组件实现类
@property (nonatomic, strong) id<RAFTKVStorageFactoryProtocol> kvImpl;

/// 日志组件实现类
@property (nonatomic, strong) id<RAFTLogProtocol> logImpl;

/// 网络组件实现类
@property (nonatomic, strong) id<RAFTNetworkProtocol> httpImpl;

/// json模型转化实现类
/// 默认实现RDeliveryJsonModelImpl依赖了YYModel的pod库，如果无特殊情况，直接注入RDeliveryJsonModelImpl就可以
/// 如果业务集成了与公有pod库冲突的YYModel，如二进制集成等，则需要自己实现impl，并调用自己的YYModel实现RDeliveryYYModelProtocol协议
/// （注意：如果是自己注入的实现，需要支持YYModel协议中的modelContainerPropertyGenericClass方法，协议中的方法名不能是重新命名的）
@property (nonatomic, strong) id<RDeliveryYYModelProtocol> jsonModelImpl;

@end

#endif /* RDeliveryDependProtocol_h */
